/**
 * 变更管理类型定义
 */

import type { ManagementStatus } from '../types'

/**
 * 变更类型枚举
 */
export enum ChangeType {
	ORG_CHANGE = 1, // 单位变更
	PROJECT_CHANGE = 2 // 项目变更
}

/**
 * 变更信息基础接口
 */
export interface ChangeInfo {
	// ============ 基本信息 ============
	id?: string | number // 主键ID
	athleteId?: string | number // 运动员ID
	athleteName?: string // 运动员姓名
	sex?: number // 性别 (0=男, 1=女)
	sexLabel?: string // 性别标签
	idNumber?: string // 身份证号
	registerNumber?: string // 注册证号

	// ============ 变更信息 ============
	changeType?: ChangeType // 变更类型 (1=单位变更, 2=项目变更)
	changeReason?: string // 变更原因
	applyTime?: string // 申请时间

	// ============ 审核信息 ============
	approvalStatus?: ManagementStatus // 审批状态
	approvalOpinion?: string // 审批意见
	rejectReason?: string // 驳回原因
	approver?: string // 审批人
	approvalTime?: string // 审批时间

	// ============ 注册信息 ============
	registerYear?: number | string // 注册年度
	firstRegisterYear?: number | string // 首次注册年度

	// ============ 训练信息 ============
	trainOrgId?: number // 在训单位ID
	trainOrgLabel?: string // 在训单位名称

	// ============ 系统字段 ============
	createBy?: string // 创建人
	createTime?: string // 创建时间
	updateBy?: string // 更新人
	updateTime?: string // 更新时间
	remark?: string // 备注

	[property: string]: any // 扩展字段
}

/**
 * 项目变更信息接口
 */
export interface ProjectChangeInfo extends ChangeInfo {
	// ============ 变更前项目信息 ============
	beforeProjectId?: number // 变更前项目ID
	beforeProjectLabel?: string // 变更前项目名称
	beforeRegisterOrgId?: number // 变更前注册单位ID
	beforeRegisterOrgLabel?: string // 变更前注册单位名称

	// ============ 变更后项目信息 ============
	afterProjectId?: number // 变更后项目ID
	afterProjectLabel?: string // 变更后项目名称
	afterRegisterOrgId?: number // 变更后注册单位ID
	afterRegisterOrgLabel?: string // 变更后注册单位名称
}

/**
 * 单位变更信息接口
 */
export interface OrgChangeInfo extends ChangeInfo {
	// ============ 注册项目信息 ============
	registerProjectId?: number // 注册项目ID
	registerProjectLabel?: string // 注册项目名称

	// ============ 变更前单位信息 ============
	beforeOrgId?: number // 变更前单位ID
	beforeOrgLabel?: string // 变更前单位名称

	// ============ 变更后单位信息 ============
	afterOrgId?: number // 变更后单位ID
	afterOrgLabel?: string // 变更后单位名称
}

/**
 * 变更查询参数
 */
export interface ChangeQueryParams {
	// 分页参数
	pageNum?: number
	pageSize?: number

	// 筛选参数
	approvalStatus?: ManagementStatus // 审批状态
	changeType?: ChangeType // 变更类型

	// 搜索参数
	athleteName?: string // 运动员姓名
	registerNumber?: string // 注册证号
	idNumber?: string // 身份证号

	// 排序参数
	orderByColumn?: string
	isAsc?: string

	[key: string]: any // 其他参数
}

/**
 * 变更列表响应
 */
export interface ChangeListResponse {
	code: number
	msg: string
	data: {
		rows: (ProjectChangeInfo | OrgChangeInfo)[]
		total: number
	}
}

/**
 * 变更审批参数
 */
export interface ChangeApprovalParams {
	ids: (string | number)[] // 变更ID列表
	approvalOpinion?: string // 审批意见
	rejectReason?: string // 驳回原因
	approvalStatus: ManagementStatus // 审批状态 (3=核准, 4=驳回)
}

/**
 * 变更申请请求参数
 */
export interface ChangeRequestParams {
	/**
	 * 运动员ID
	 */
	infoId: number
	/**
	 * 变更类型(1-单位变更、2-项目变更、3-等级变更)
	 */
	changeType: number
	/**
	 * 变更后的值
	 */
	changeAfter?: number
}

/**
 * 通用响应接口
 */
export interface CommonResponse {
	code: number
	msg: string
	data?: any
}
